// 从ESlint9.x之后，建议使用eslint.config.js(ESNext)或者 eslint.config.mjs(CommonJs)命名配置文件
// 导入了globals 全局变量库模块，该模块提供了一组与定义的全局变量（如：window、document等）这些变量通常在不同的环境（如：浏览器、Node.js）中可用，在ESLint配置中，你可以使用这个模块来指定代码所运行的环境，从而定义全局变量
import globals from 'globals'
// 针对Javascript的ESLint配置和规则。保持JavaScript代码的一致性和质量
import pluginJs from '@eslint/js'
// 导入`typescript-eslint` 插件（ `typescript-eslint/parser` 和 `typescript-eslint/eslint-plugin`），提供了对TYpeScript的支持，包括TS的解析器和推荐的规则集，用于在TypeScript文件中进行lint检查
import tseslint from 'typescript-eslint'
// 导入eslint-plugin-vue插件，提供了Vue.js特有的EsLint规则，确保Vue文件中的代码符合Vue.js的最佳时间和代码风格指南。
import pluginVue from 'eslint-plugin-vue'
// vue文件解析器
import vueParser from 'vue-eslint-parser'
// 语法风格
// import stylistic from '@stylistic/eslint-plugin'
// tseslint.config 函数可以让配置文件有代码提示，避免写错
export default tseslint.config({
    // 指定排除文件
    ignores: ['node_modules', 'dist', 'public'],
    //配置应用规则匹配到的文件
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    //配置规则，当指定 files 或 ignores 时，这些配置的规则只对匹配的文件可用
    extends: [
        pluginJs.configs.recommended,
        ...tseslint.configs.recommended,
        ...pluginVue.configs['flat/essential'], // vue3推荐的eslint配置
    ],
    languageOptions: {
        parser: vueParser, // 使用vue解析器，这个可以识别vue文件
        parserOptions: {
            parser: tseslint.parser, // 在vue文件上使用ts解析器
            sourceType: 'module',
        },
        globals: {
            ...globals.browser,
            /** 追加一些其他自定义全局规则 */
            wx: true,
        },
    },
    rules: {
        'vue/multi-word-component-names': 'off',
        'vue/max-attributes-per-line': 'off',
        // 在这里追加 vue 规则
        'vue/no-mutating-props': [
            'error',
            {
                shallowOnly: true,
            },
        ],
        // vue html 支持4个空格
        'vue/html-indent': ['warn', 4],
        //prop 必须指定默认值
        'vue/require-default-prop': 'off',
        'vue/first-attribute-linebreak': 'off',
        // 转义符
        'no-useless-escape': 'off',
        // 关闭这条规则, 允许定义 any
        '@typescript-eslint/no-explicit-any': 'off',
    },
})
